import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

public class ProductTypeDao {
    private Connection conn = null; // 连接对象的变量
    private PreparedStatement pstm = null; // 预处理对象
    private ResultSet rs = null;// 结果集合
    public boolean addProductType(String productTypeName,
                                  String productTypeDesc) throws Exception {

        // 执⾏的SQL语句 注意 英⽂输⼊法的 ? ，?作为参数的占位符使⽤
        String sql = "insert into spsjb(productTypeName, productTypeDesc) VALUES( ?, ?)";
        // 1. 获取连接对象
        conn = JDBCUtil.getConnection();
        // 2. 通过连接对象 创建 PreparedStatement对象 对SQL 语句进⾏预编译
                pstm = conn.prepareStatement(sql);
        // 使⽤PreparedStatement 根据 ? 的位置设置参数
        pstm.setString(1, productTypeName); // 参数是String类型，所以使⽤setString
        pstm.setString(2, productTypeDesc);
        // 3. 执⾏ SQL 语句
        int rows = pstm.executeUpdate(); // ⽤于 新增、修改、删除
        // 释放资源
        JDBCUtil.close(pstm, conn);
        if (rows > 0) {
            return true;
        } else {
            return false;
        }
    }
    /**
     * 查询所有商品类型
     * @return
     * @throws Exception
     */
    public List<ProductType> findAll() throws Exception{
        List<ProductType> productTypeList = new ArrayList<>();

        // 执⾏的SQL语句 注意 英⽂输⼊法的 ? ，?作为参数的占位符使⽤
        String sql = "SELECT id, productTypeName, productTypeDesc FROM spsjb";
        // 1. 获取连接对象
        conn = JDBCUtil.getConnection();
        // 2. 通过连接对象 创建 PreparedStatement对象 对SQL 语句进⾏ 预编译
                pstm = conn.prepareStatement(sql);
        // 3. 执⾏SQL语句 executeQuery() 返回值为 ResultSet
        rs = pstm.executeQuery();
        // 4. 遍历结果集 // 如果⽬标只有⼀条记录使⽤if，多条使⽤循环
        while(rs.next()) {
            // 将查询出的这⼀⾏记录中每个字段都封装到实体属性上
            ProductType productType = new ProductType();
            productType.setId(rs.getInt("id"));

            productType.setProductTypeName(rs.getString("productTypeName"));

                    productType.setProductTypeDesc(rs.getString("productTypeDesc"));

                            // 将 实体对象添加到集合中
                            productTypeList.add(productType);

        }
        // 5. 释放资源
        JDBCUtil.close(rs, pstm, conn);

        return productTypeList;
    }


    /**
     * 根据id 修改产品的类别名称
     * @return
     * @throws Exception
     */

    public boolean updateProductType(String productTypeName,
                                     Integer id) throws Exception {

        // 执⾏的SQL语句 注意 英⽂输⼊法的 ? ，?作为参数的占位符使⽤
        String sql = "update spsjb set productTypeName = ? where id = ?";
        // 1. 获取连接对象
        conn = JDBCUtil.getConnection();
        // 2. 通过连接对象 创建 PreparedStatement对象 对SQL 语句进⾏ 预编译
                pstm = conn.prepareStatement(sql);
        // 使⽤PreparedStatement 根据 ? 的位置设置参数
        pstm.setString(1, productTypeName); // 参数是String 类型，所以使⽤ setString
        pstm.setInt(2, id);
        // 3. 执⾏ SQL 语句
        int rows = pstm.executeUpdate(); // ⽤于 新增、修改、删除
        // 释放资源
        JDBCUtil.close(pstm, conn);
        if(rows >0) {
            return true;
        }else {
            return false;
        }
    }



    public static void main(String[] args) throws Exception
    {
        ProductTypeDao dao = new ProductTypeDao();
// boolean flag = dao.addProductType("⼿机", "⼿机类");
// System.out.println(flag);
// boolean flag = dao.updateProductType("电⼦数", 3);
// System.out.println(flag);
        List<ProductType> productTypeList = dao.findAll();
        for(ProductType productType : productTypeList) {
            System.out.println(productType);
        }
    }
}
